/**
 * @file error_checks.h
 * @author Marco Luisi
 *  Created on: 26 May 2010
 *
 * @brief Header file per le macro della gestione errori.
 */

/***
 * Nomenclatura: EC_(valore controllato)_(valore restituito o azione conseguente)
 *
 */

#ifndef ERROR_CHECKS_H_
#define ERROR_CHECKS_H_

/**  Se s è NULL, restituisce -1*/
#define EC_NULL_M1(s) if((s) == NULL) {return -1;}
/** Se s è NULL, esegue f e poi restituisce -1 */
#define EC_NULL_F(s,f) if ((s) == NULL) {f; return -1;}
/** Se s è NULL, stampa messaggio d'errore ed esce chiamando la rispettiva funzione di cleanup. */
#define EC_NULL_E(s,m) if ((s) == NULL) {perror(m); exit(EXIT_FAILURE);}

/* Se s è -1, restituisce -1. */
#define EC_M1(s) if ((s) == -1) {return -1;} //utile?
#define EC_M1_N(s) if((s) == -1) {return NULL;} // inutile?
/* Se s è -1, stampa messaggio d'errore e restituisce -1. */
#define EC_M1_P(s,m) if ((s) == -1) {perror(m); return -1;}
/* Se s è -1, esegue f e restituisce -1. */
#define EC_M1_F(s,f) if ((s) == -1) {f; return -1;}
/* Se s è -1, stampa messaggio d'errore ed esce. */
#define EC_M1_E(s,m) if((s) == -1) {perror(m); exit(EXIT_FAILURE);}


#define EC_Z(s) if ((s) != 0 ) {exit(EXIT_FAILURE);} //da cambiare

#endif /* ERROR_CHECKS_H_ */
